home *** CD-ROM | disk | FTP | other *** search
/ Aminet 22 / Aminet 22 (1997)(GTI - Schatztruhe)[!][Dec 1997].iso / Aminet / util / rexx / ElAssign.lha / ElAssign / ElAssign.REXX < prev   
OS/2 REXX Batch file  |  1997-09-10  |  6KB  |  241 lines

  1. /*    Script which removes all assigns from a directory and all its
  2.     subdirectories and files and optionally deletes the directory with its
  3.     contents. $VER: ElAssign.REXX V1.1 (10.9.97) © Andrija Antonijevic
  4.  
  5.     Written by Andrija Antonijevic <TheAntony@bigfoot.com>.
  6.  
  7.     Many thanks to Charles Patterson <midian@azstarnet.com> whose
  8.     DeAssign.dopus5 gave me the idea to write my own version.
  9.  
  10.     I made the following improvements:
  11.  
  12.     - You don't need DOpus5 since it works with everything including
  13.       DOpus4, DOpus5 and any other kind of filemanager program.
  14.  
  15.     - It will remove all assigns from a directory and all its subdirectories
  16.       and files unless NODEEP option is specified.
  17.  
  18.     - Deleting chosen directory with all its contents is just an
  19.       option here. You can specify DELETE for deleting the directory
  20.       with confirmation and KILL for deleting without confirmation.
  21.  
  22.     - You can give any kind of path to the directory/file: using
  23.       complete path, relative path or assign.
  24.  
  25.  
  26.     Version 1.1:
  27.  
  28.     - Fixed a very dangerous bug caused by different treatment
  29.       of .info files in DOS. If .info file was passed as argument
  30.       to this script, it would eventually become the current directory!
  31.       So it was very dangerous if someone used KILL option and selected
  32.       icon file for deletion.
  33.  
  34. Requirements:
  35. ~~~~~~~~~~~~~
  36.  
  37.     - rexxsupport.library (reqired)
  38.  
  39.     - rexxreqtools.library - only if you specify DELETE option
  40.       (see below)
  41.  
  42.     - Filemanager like DOpus4 or 5 will make things easier (optional ;))
  43.  
  44. Command line:
  45. ~~~~~~~~~~~~~
  46.  
  47.     ElAssign.REXX NAME [DELETE | KILL] [NODEEP]
  48.  
  49.  
  50.     NAME is the name of the file/directory to remove the assigns from.
  51.     If NAME has spaces in it, it must be enclosed with double quotes.
  52.  
  53.     DELETE deletes the directory but only if you confirm whilst
  54.     KILL is a silent killer ;) Default is not to delete anything.
  55.     DELETE will override KILL if you "accidentaly" put them both
  56.     into the command line.
  57.  
  58.     NODEEP instructs the script only to remove assigns from the
  59.     argument you specified (file or directory) and not to go
  60.     deep in the jungles of the directory (you can't go into
  61.     the file, can you?).
  62.  
  63.  
  64. Usage:
  65. ~~~~~~
  66.  
  67. From Shell:
  68.  
  69.     [RX] FullPath:ToScript/ElAssign.REXX NAME [DELETE | KILL] [NODEEP]
  70.  
  71. DOpus4:
  72.  
  73. Configuration/Buttons:
  74.  
  75. +--------+
  76. |AmigaDOS| RX FullPath:ToScript/ElAssign.REXX "{f}" [DELETE | KILL] [NODEEP]
  77. +--------+
  78.  
  79.     You might want to select "Do all files".
  80.     You can also set up a hotkey for the button.
  81.  
  82. DOpus5:
  83.  
  84.     I don't have DOpus5 but it's fairly easy to set this script up
  85.     with it. Please consult your DOpus5 manual to see how to do it.
  86.     Looking at installation instructions for DOpus4 ({f} is file name
  87.     which should be enclosed with double quotes) might help.
  88.  
  89.     Oh, yes. "El" in ElAssign doesn't have anything to do with Spain.
  90.     It's short from Eliminate :)
  91.  
  92.     Finally, if you find any bugs or have some suggestions, please contact
  93.     me (Andrija Antonijevic <TheAntony@bigfoot.com>).
  94. */
  95.  
  96. QUOTE='22'x
  97. LF='0A'x
  98. TempAssign='T:AssignResult'
  99. TempWhich='T:WhichResult'
  100. TempCD='T:CDResult'
  101. Quest='Do you really wish to delete'
  102. DoDel=0
  103. Deep=1
  104.  
  105. OPTIONS RESULTS
  106.  
  107. IF ~SHOW('L', 'rexxsupport.library') THEN IF ~ADDLIB('rexxsupport.library', 0, -30, 0) THEN DO 
  108.     SAY "Couldn't open rexxsupport.library!"
  109.     EXIT(10)
  110. END
  111.  
  112. PARSE ARG '"' Path '"' Temp Temp1 Temp2
  113. IF Path='' & Temp='' & Temp1='' & Temp2='',
  114.     THEN PARSE ARG Path Temp Temp1 Temp2
  115.  
  116. IF ~(EXISTS(Path)) | Path='' THEN DO
  117.     SAY 'Invalid file/dir specified!'
  118.     EXIT
  119. END
  120.  
  121. IF (UPPER(Temp)='KILL' | UPPER(Temp1)='KILL' | UPPER(Temp2)='KILL'),
  122.     THEN DoDel=2
  123. IF (UPPER(Temp)='DELETE' | UPPER(Temp1)='DELETE' | UPPER(Temp2)='DELETE'),
  124.     THEN DoDel=1
  125. IF (UPPER(Temp)='NODEEP' | UPPER(Temp1)='NODEEP' | UPPER(Temp2)='NODEEP'),
  126.     THEN Deep=0
  127.  
  128. IF DoDel=1 THEN IF ~SHOW('L','rexxreqtools.library') THEN IF ~ADDLIB('rexxreqtools.library',0,-30,0) THEN DO
  129.     SAY "Couldn't open rexxreqtools.library!"
  130.     EXIT(10)
  131. END
  132.  
  133. InfoFlag=0
  134.  
  135. IF RIGHT(Path, 5)='.info' THEN DO
  136.     InfoFlag=1
  137.     PL=LENGTH(Path)
  138.  
  139.     DO i=PL TO 1 BY -1
  140.         IF SUBSTR(Path, i, 1)=':' THEN BREAK
  141.     END
  142.     Colon=i
  143.  
  144.     DO i=PL TO 1 BY -1
  145.         IF SUBSTR(Path, i, 1)='/' THEN BREAK
  146.     END
  147.     Slash=i
  148.  
  149.     LastSpec=MAX(Colon, Slash)
  150.     Filename=RIGHT(Path, PL-LastSpec)
  151.     Path=LEFT(Path, LastSpec)
  152. END
  153.  
  154. StorPath=Path
  155.  
  156. ADDRESS COMMAND 'Which 'QUOTE||Path||QUOTE' >'TempWhich
  157. Suc=OPEN(FHWh, TempWhich, 'R')
  158. IF Suc~=1 THEN DO
  159.     SAY "Couldn't open temporary file!"
  160.     EXIT(10)
  161. END
  162. Path=READLN(FHWh)
  163. CLOSE(FHWh)
  164. ADDRESS COMMAND 'Delete 'TempWhich' QUIET'
  165.  
  166. IF Path='' THEN DO
  167.     OldDir=PRAGMA('D', StorPath)
  168.     ADDRESS COMMAND 'CD >'TempCD
  169.     Suc=OPEN(FHCD, TempCD, 'R')
  170.     IF Suc~=1 THEN DO
  171.         SAY "Couldn't open temporary file!"
  172.         EXIT(10)
  173.     END
  174.     Path=READLN(FHCD)
  175.     CLOSE(FHCD)
  176.     ADDRESS COMMAND 'Delete 'TempCD' QUIET'
  177.     PRAGMA('D', OldDir)
  178. END    
  179.  
  180. IF Path='' THEN DO
  181.     SAY 'No file/dir supplied!'
  182.     EXIT(10)
  183. END
  184.  
  185. IF InfoFlag=1 THEN DO
  186.     IF RIGHT(Path, 1)~=':' THEN Path=Path||'/'
  187.     Path=Path||Filename
  188. END
  189.  
  190. Leny=LENGTH(Path)
  191.  
  192. Cntr=0
  193. ADDRESS COMMAND 'Assign DIRS >'TempAssign
  194. Suc=OPEN(FHAss, TempAssign, 'R')
  195.  
  196. IF Suc~=1 THEN DO
  197.     SAY "Couldn't open temporary file!"
  198.     EXIT(10)
  199. END
  200.  
  201. Curr=0
  202. Line=READLN(FHAss)
  203. Line=READLN(FHAss)
  204.  
  205. DO WHILE ~EOF(FHAss)
  206.     Line=READLN(FHAss)
  207.     Prev=Curr
  208.     Curr=Curr+1
  209.     PARSE VAR Line Assign.Curr Dir.Curr
  210.     Dir.Curr=STRIP(Dir.Curr)
  211.     IF Assign.Curr="+" THEN Assign.Curr=Assign.Prev
  212.  
  213.     IF (Dir.Curr=Path) | (Deep & ((LEFT(Dir.Curr, Leny)=Path & SUBSTR(Dir.Curr, Leny+1,1)='/'),
  214.        | (LEFT(Dir.Curr, Leny)=Path & SUBSTR(Dir.Curr, Leny+1,1)=':'))),
  215.        THEN DO
  216.         Cntr=Cntr+1
  217.         RemAssign.Cntr=Assign.Curr
  218.         RemName.Cntr=Dir.Curr
  219.     END
  220. END
  221.  
  222. CLOSE(FHAss)
  223. ADDRESS COMMAND 'Delete 'TempAssign' QUIET'
  224.  
  225. IF Cntr>0 THEN DO
  226.     DO I=1 to Cntr
  227.         ADDRESS COMMAND 'Assign 'RemAssign.I': 'QUOTE||RemName.I||QUOTE' REMOVE'
  228.     END
  229. END
  230.  
  231. IF DoDel=1 THEN DO
  232.     RES=rtEZRequest(Quest||LF||LF||Path, '_Delete|_Cancel', 'ElAssign', 'rt_reqpos=reqpos_centerscr rtez_flags=ezreqf_centertext')
  233.     IF RES=0 THEN DoDel=0
  234. END
  235.  
  236. IF DoDel~=0 THEN DO
  237.     ADDRESS COMMAND 'Delete 'QUOTE||Path||QUOTE' ALL FORCE QUIET'
  238. END
  239.  
  240. EXIT
  241.